perm filename IMPRED.FAI[SS,SYS] blob
sn#851604 filedate 1988-01-15 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 title IMPRED A B P TEST STRIN I32 O32 CLRST CLRWT STROUT FINO IEPIEN IDPIEN ODPIEN PIA IDONE IEND IMP ISTART LPDL PDL LBUF BUF IMPRED IMPRE0 IMPLOO IREAD CPOPJ IREAD2
C00005 ENDMK
C⊗;
title IMPRED ;⊗ A B P TEST STRIN I32 O32 CLRST CLRWT STROUT FINO IEPIEN IDPIEN ODPIEN PIA IDONE IEND IMP ISTART LPDL PDL LBUF BUF IMPRED IMPRE0 IMPLOO IREAD CPOPJ IREAD2
A←1
B←2
P←17
;CONO BITS
TEST←← 100000 ; Enter test mode. In test mode the output side is
; tied to the input side of the interface, and READY
; is brought down
STRIN←← 040000 ; Start input, sets stop, clears IEND.
; Stop means enable wait. Wait happens after the
; last bit has come in (if enabled by "stop") to
; allow the programmer to change data modes before
; the first bit of the next word comes in
I32←← 020000 ; Set 32. bit input mode if IDPIEN set
O32←← 010000 ; Set 32. bit output mode if ODPIEN set
CLRST←← 004000 ; Clear stop
CLRWT←← 002000 ; Clear wait
STROUT←←000200 ; Start output
FINO←← 000100 ; Finish output (last bit has been sent)
IEPIEN←←000040 ; Enable change of IEPIA
IDPIEN←←000020 ; Enable change of input byte size and IDPIA, clear
; IMPERR
ODPIEN←←000010 ; Enable change of output byte size and ODPIA
PIA←← 000007 ; PI channel (see IEPIEN, IDPIEN, ODPIEN)
;CONI BITS
↑↑IDONE←←020000 ; Input done
↑↑IEND←←010000 ; Input end (end of message)
IMP←400
ISTART←←STRIN!CLRWT!IEPIEN!IDPIEN
LPDL←←40
PDL: BLOCK LPDL
LBUF←←100
BUF: BLOCK LBUF
IMPRED: RESET
MOVE P,[IOWD LPDL,PDL]
EIOTM
CONO IMP,TEST
MOVEI A,4
SLEEP A, ;let the IMP settle
IMPRE0: EIOTM
SETZM BUF
MOVE A,[BUF,,BUF+1]
BLT A,BUF+LBUF-1 ;clear our buffer
JFCL
CONO IMP,ISTART
MOVEI A,1
SLEEP A,
MOVE B,[-LBUF,,BUF]
IMPLOO: PUSHJ P,IREAD ;skip on end of msg
AOBJN B,IMPLOO
LIOTM
PUSHJ P,DDT↑
JRST IMPRE0
IREAD: CONSO IMP,IDONE ;any input data ready?
JRST IREAD2 ;no
CONSZ IMP,IEND
AOS (P) ;skip on end of msg
DATAI IMP,(B) ;yes
CONO IMP,CLRWT!CLRST
CPOPJ: POPJ P,
IREAD2: MOVEI A,0 ;brief wait
SLEEP A,
JRST IREAD
END IMPRED